﻿//#include <sstream>
//
//#include <IUString.h>
//
//#include "RXTypes.h"
//#include "textstream.h"
//
//struct TextInputStream::Private
//{
//	std::wstring buffer_str;
//	ByteArray buffer;
//	IUStringUtils::StringCodecPtr codec;
//};
//
//TextInputStream::TextInputStream(InputStream * next,const char* codec):_P(new Private())
//{
//	_P->codec = IUStringUtils::CreateCodec(codec);
//}
//
//std::wstring TextInputStream::ReadLine()
//{
//	FillUp();
//
//	int index = -1;
//
//	for (auto i : _P->buffer_str)
//	{
//		index++;
//		if (i == L'\n')
//		{
//			break;
//		}
//	}
//
//	std::wstring str = {_P->buffer_str.begin() + index};
//	return {};
//	_P->buffer_str
//
//
//	return std::wstring();
//}
//
//bool TextInputStream::FillUp()
//{
//	int avaliable = GetNext()->avaliable();
//
//	if (avaliable > 0)
//	{
//		ByteArray b;
//		b.resize(avaliable, 0);
//		GetNext()->read(b.data(),avaliable);//读取能读取的部分
//		_P->buffer += b;//填充到缓冲区中
//
//		int size = _P->buffer.size();
//		b = _P->buffer;
//		while (!b.empty())
//		{
//			bool ok;
//			auto str = _P->codec->Decode(b,&ok);
//			if (ok)
//			{
//				_P->buffer_str += str;
//				break;
//			}
//
//			_P->buffer.erase(_P->buffer.end() - 1);
//		}
//
//		return true;
//	}
//
//	return false;
//}
//
//bool TextInputStream::Fetch()//挂起，等到有更多数据可读
//{
//	int val = GetNext()->read();
//	if (val == -1)//流已结束，不会有更多可读的东西
//		return false;
//	_P->buffer.push_back(val);
//	FillUp();
//	return true;
//}
//
//int TextInputStream::doRead(wchar_t * buffer, int readLen)
//{
//	
//	ByteArray buffer_a;
//	while (true)
//	{
//		int val = GetNext()->read();
//		if (val == -1)
//		{
//			break;
//		}
//		buffer_a.push_back(val);
//		auto dec = _P->codec->Decode(buffer_a);
//		if (!dec.empty()) {
//			_P->buffer_str += dec;
//
//			if (_P->buffer_str.size() == readLen)
//			{
//				break;
//			}
//
//			buffer_a.clear();
//		}
//	}
//
//	int len = _P->buffer_str.size();
//	memcpy(buffer, _P->buffer_str.data(), len * sizeof(wchar_t));
//	_P->buffer_str.clear();
//	return len;
//}
//
//int TextInputStream::doRead(unsigned char * buffer, int readLen)
//{
//	return 0;
//}
//
//std::wstring TextInputStream::Read(int len)
//{
//	return std::wstring();
//}
//
//std::wstring TextInputStream::ReadUntil(wchar_t * mark)
//{
//	return std::wstring();
//}
